package com.gjp.controller;

import com.gjp.entity.UserEntity;
import com.gjp.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * Created by 郭金鹏 on 2017/5/29.
 */
@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    UserService userService;

    /**
     * 查询一个用户
     *
     * @param id id值
     * @return 返回查询到的用户
     */
    @GetMapping("/id/{id}")
    public UserEntity findOne(@PathVariable("id") Long id) {
        return userService.findOne(id);
    }

    /**
     * 查询所有用户
     *
     * @return list列表
     */
    @GetMapping("/findAll")
    public List<UserEntity> findAll() {
        return userService.findAll();
    }

    /**
     * 添加 或 更新一个用户
     *
     * @param userEntity 传入参数
     * @return 返回添加成功的用户
     */
    @PostMapping("/save")
    public UserEntity save(UserEntity userEntity) {
        return userService.save(userEntity);
    }

    /**
     * 删除一个用户
     *
     * @param id 传入的id值
     * @return 返回成功信息
     */

    @DeleteMapping("/id/{id}")
    public String delete(@PathVariable("id") Long id) {
        userService.delete(id);
        return "删除成功";
    }

    /**
     * 分页查询
     *
     * @return 查询结果
     */
    @GetMapping("/findAllByPage/{page}")
    public Page<UserEntity> findAllByPage(@PathVariable("page") Integer page) {

        //排序规则
        Sort sort = new Sort(Sort.Direction.ASC, "id");

        //内置的pageable对象 默认从0开始，页面传过来1，要-1才是第一页
        Pageable pageable = new PageRequest(page-1, 10, sort);

        //调用方法返回一个page对象
        Page<UserEntity> all = userService.findAllByPage(pageable);
        return all;

        //Page<T>对象中的各个属性
        //getTotalElements();    //数据库中总记录数
        //getTotalPages()        //总页数
        //getNumberOfElements() //查询结果集条数
        //getNumber();          //当前页数(默认从0开始,0代表第一页)
        //isFirst();            //是否为第一页
        //getContent();         //查询结果集
    }
}
